#ifndef PRIORITYQUEUE_H
#define PRIORITYQUEUE_H

#include <iostream>
#include <iomanip>
#include "RuntimeException.h"
//#include "Item.h"

template <typename T>
class PriorityQueue{
public:

	struct EmptyPriorityQueue : public RuntimeException {
		EmptyPriorityQueue() : RuntimeException("Queue is Empty") {}
	};

	virtual int* insert_item(const unsigned int k, const T& e, int& num_comps) = 0;
	virtual T& min_elem() throw(EmptyPriorityQueue()) = 0;
	virtual int min_key() throw(EmptyPriorityQueue()) = 0;
	virtual void remove_min(int& num_comps) = 0;
	virtual bool is_empty() const = 0;
	virtual void update_key(T& e, int k, int& num_comps) = 0;
};

#endif
